package com.dataStructure.string;

import java.util.Arrays;

public class LeetCode {

    public static void main(String[] args) {

       String svalue = "zh";

        if (!svalue.equals("zh") && !svalue.equals("en")) {
            System.out.println("chuli1");
        }

    }


    /**
     * 位运算，统计1的个数
     * @param num
     * 5
     * 101
     * 100
     */
    public static void bitCount (int num) {
        int tempNum = num;
        int count = 0;
        while (num != 0) {
            num = num & (num - 1);
            count++;
        }
        System.out.println(count == Integer.bitCount(tempNum));
    }
//    /**
//     * 力扣 394  字符串解码
//     * @param s
//     * @return
//     */
//    public String decodeString(String s) {
//        new Stringbu
//    }


    public int strStr(String haystack, String needle) {
        return haystack.indexOf(needle);
    }

    /**
     *  剑指offer，58-II 左旋转字符串   方法二
     * @param s  输入字符
     * @param n   个数
     * @return  字符串
     */
    public String reverseLeftWords2(String s, int n) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < n; i++) {
            char temp = chars[0];
            for (int j = 0;j < s.length()-1; j++) {
                chars[j] = chars[j+1];
            }
            chars[s.length() -1] = temp;
        }
        return new String(chars);
    }

    /**
     *  剑指offer，58-II 左旋转字符串
     * @param s  输入字符
     * @param n   个数
     * @return  字符串
     */
    public String reverseLeftWords(String s, int n) {
        StringBuilder builder = new StringBuilder(s);
        int i = 0;
        for (char e : s.toCharArray()) {
            if (i >= n) {
                break;
            }
            else {
                builder.deleteCharAt(0);
                builder.append(e);
            }
            i++;
        }

        return builder.toString();
    }

    /**
     *    力扣151. 反转字符串中的单词，对于 split方法的理解，如果是
     *    ”we are family“ ，显然结果就是一个元素数量为3的数组，
     *    ” we are family“ ， 结果是元素数量为4的数组，且s[0]为 ”“ 空串
     *    ”we are   family“  三个空格的，最后会替换成两个 ""
     *
     * @param s
     * @return
     */
    public String reverseWords(String s) {
        String[] s1 = s.split(" ");
        StringBuilder string = new StringBuilder();
        for (int i = s1.length -1; i >=0 ;i--) {
            if (s1[i]!=null && !s1[i].equals("") ) {
                string.append(s1[i]);
                string.append(" ");
            }
        }
        string.deleteCharAt(string.length()-1);
        return string.toString();
    }

    /**
     * 剑指offer 05.  替换空格，巧用replace()  方法，进行全部替换
     * @param s
     * @return
     */
    public String replaceSpace(String s) {
        String s2 = s.replace(" ","%20");
        return s2;
    }


    /**
     * 力扣541. 字符串反转2
     * @param s
     * @param k
     * @return
     */
    public String reverseStr(String s, int k) {
        char[] s2 = s.toCharArray();
        for (int i = 0;i < s.length(); i += 2 * k) {
            int start = i;

            if (i + k < s.length()) {
                //方转前k个字符串
                int end = i + k - 1;
                while (start < end) {
                    char temp = s2[start];
                    s2[start] = s2[end];
                    s2[end] = temp;
                    start++;
                    end--;

                }
            }   else {
                int end = s.length() -1;
                while (start < end) {
                    char temp = s2[start];
                    s2[start] = s2[end];
                    s2[end] = temp;
                    start++;
                    end--;
                }
            }
        }
        s = new String(s2);
        return s;
        
    }


    /**
     * 力扣344. 字符串反转, 我们在反转时采用左闭右闭 区间，最后反转的两个指针一定是 start > end 而且 start 是 比最开始那个终止位置
     * 要多一位，end 则反之。
     * @param s
     */
    public void reverseString(char[] s) {
        int i = 0;
        int j = s.length-1;
        while (i < j) {
            char c = s[i];
            s[i] = s[j];
            s[j] = c;
            j--;
            i++;
        }


    }
}
